package com.example.systembroadcast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    private static final String TAG="MainActivity";
    private TextView mTvLevel;
    private TextView mTvStatus;
    private TextView mTvHealth;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTvLevel=(TextView) findViewById(R.id.tv_level);
        mTvStatus=(TextView) findViewById(R.id.tv_status);
        mTvHealth=(TextView) findViewById(R.id.tv_health);
        this.registerReceiver(this.mBatteryReceiver,new IntentFilter(
                Intent.ACTION_BATTERY_CHANGED));
    }
    @SuppressLint("ResourceType")
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.layout.activity_main,menu);
        return true;
    }
    private BroadcastReceiver mBatteryReceiver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            int level=arg1.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
            int scale=arg1.getIntExtra(BatteryManager.EXTRA_SCALE,0);
            int levelPercent=(int) (((float)level/scale)*100);
            mTvLevel.setText("电量:"+levelPercent+"%");
            if (level<=10){
                mTvLevel.setTextColor(Color.RED);
            }else {
                mTvLevel.setTextColor(Color.BLUE);
            }
            int status=arg1.getIntExtra(BatteryManager.EXTRA_STATUS,BatteryManager.BATTERY_STATUS_UNKNOWN);
            String strStatus="未知状态";
            switch (status){
                case BatteryManager.BATTERY_STATUS_CHARGING:
                    strStatus="充电中……";
                    break;
                case BatteryManager.BATTERY_STATUS_DISCHARGING:
                    strStatus="放电中……";
                    break;
                case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
                    strStatus="未充电";
                    break;
                case BatteryManager.BATTERY_STATUS_FULL:
                    strStatus="充电完成";
                    break;
            }
            mTvStatus.setText("状态："+strStatus);
            int health=arg1.getIntExtra(BatteryManager.EXTRA_HEALTH,BatteryManager.BATTERY_HEALTH_UNKNOWN);
            String strHealth="未知：（";
            switch (status){
                case BatteryManager.BATTERY_HEALTH_GOOD:
                    strHealth="好：）";
                    break;
                case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                    strHealth="过热！";
                    break;
                case BatteryManager.BATTERY_HEALTH_DEAD:
                    strHealth="良好";
                    break;
                case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                    strHealth="电压过高！";
                    break;
                case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
                    strHealth="未知：（";
                    break;
                case BatteryManager.BATTERY_HEALTH_COLD:
                    strHealth="过冷！";
                    break;
            }
            mTvHealth.setText("健康状况："+strHealth);
        }
    };
}